home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 September / PCWorld_2006-09_cd.bin / v cisle / hexer / mpth_17.exe / {app} / scripts / Extract strings.mps < prev    next >
Text File  |  2006-03-19  |  6KB  |  219 lines

  1. INCLUDE 'def.mps'
  2. INCLUDE 'gui.mps'
  3. option GlobalVars, 1
  4. option ReadTags, 0
  5. OPTION UNDO, 0
  6. option target, structureviewer
  7.  
  8. DEF myregkey envparse("%appregkey%\\extract strings")
  9. call DEC_TEXT_CONV
  10.  
  11.  
  12. var charset dword     := ansi, ascii7, unicode, ebcdic...
  13. var minlen byte       := minimum length of a string to be found
  14. var charstouse text   := characters to treat as "textual"
  15. var charstostart text := characters to treat as "textual" on start of word
  16. var limit dword       := max. amount of strings on a page
  17. var startpos qword    := starting position
  18. var cur file          := current file
  19. var alphasort byte    := do alpha sorting? 
  20.  
  21. INCLUDE '*.lng'
  22.  
  23.  
  24. cur = fileopen('::current', 'r')
  25. startpos = filegetprop(cur, 'SelStart'):= get current cursor position
  26. fileclose cur
  27.  
  28. ==== show dialog
  29. @@dialog
  30.  
  31. call readoptions
  32.  
  33. if (GuiExists('dlgExtract'))
  34.   GuiDestroy('dlgExtract')
  35. endif
  36.  
  37. call create_form
  38.  
  39. = select current combo item
  40. var b1 qword
  41. b1 = -1
  42. ifgoto charset TEXTCONVERT_ANSI, ccb0, TEXTCONVERT_DOS8, ccb1, TEXTCONVERT_ASCII7, ccb2, TEXTCONVERT_MAC, ccb3, TEXTCONVERT_EBCDIC, ccb4, TEXTCONVERT_UNICODE, ccb5, TEXTCONVERT_UNICODEBE, ccb6, TEXTCONVERT_CUSTOM, ccb7, (TEXTCONVERT_CUSTOM-1), ccb8
  43. goto ccbset
  44. @@ccb0:b1=0:goto ccbset
  45. @@ccb1:b1=1:goto ccbset
  46. @@ccb2:b1=2:goto ccbset
  47. @@ccb3:b1=3:goto ccbset
  48. @@ccb4:b1=4:goto ccbset
  49. @@ccb5:b1=5:goto ccbset
  50. @@ccb6:b1=6:goto ccbset
  51. @@ccb7:b1=7:goto ccbset
  52. @@ccb8:b1=8
  53. @@ccbset
  54. GuiSetProp('dlgExtract.cbEncoding', 'ItemIndex', b1)
  55.  
  56. b1 = GUIShowModal('dlgExtract'):= show form in modal state 
  57. if b1 == IDOK
  58.   = do extraction
  59.   call doextract
  60. endif
  61.  
  62. end
  63.  
  64.  
  65. @@check_settings:= assure valid settings
  66. var t1 text t2 text t3 text t4 text t5 text
  67. t1 = GuiGetProp('dlgExtract.edChars', 'Text')
  68. t2 = call('checkchars', t1)
  69. if (t2 != '')
  70.   msgbox (__INVCHAR__+t2), MB_ICONSTOP
  71.   = cancel closing
  72.   GuiSetProp('dlgExtract', 'ModalResult', 0)
  73.   GuiSetProp('dlgExtract.edChars', 'Focused', True)
  74.   GuiSetProp('dlgExtract.edChars', 'SelStart', (TextPos(TextUpper(t2),TextUpper(t1))-1))
  75.   GuiSetProp('dlgExtract.edChars', 'SelLength', TextLen(t2))
  76.   return
  77. endif
  78. t5 = t1
  79. t1 = GuiGetProp('dlgExtract.edStart', 'Text')
  80. t2 = call('checkchars', t1)
  81. if (t2 != '')
  82.   msgbox (__INVCHAR__+t2), MB_ICONSTOP
  83.   = cancel closing
  84.   GuiSetProp('dlgExtract', 'ModalResult', 0)
  85.   GuiSetProp('dlgExtract.edStart', 'Focused', True)
  86.   GuiSetProp('dlgExtract.edStart', 'SelStart', (TextPos(TextUpper(t2),TextUpper(t1))-1))
  87.   GuiSetProp('dlgExtract.edStart', 'SelLength', TextLen(t2))
  88.   return
  89. endif
  90. t2 = GuiGetProp('dlgExtract.edMinLen', 'Text')
  91. if (not isnumber(t2))
  92.   msgbox (__INVNUM__+t2), MB_ICONSTOP
  93.   = cancel closing
  94.   GuiSetProp('dlgExtract', 'ModalResult', 0)
  95.   GuiSetProp('dlgExtract.edMinLen', 'Focused', True)
  96.   return
  97. endif
  98. t3 = GuiGetProp('dlgExtract.edLimit', 'Text')
  99. if (not isnumber(t3))
  100.   msgbox (__INVNUM__+t3), MB_ICONSTOP
  101.   = cancel closing
  102.   GuiSetProp('dlgExtract', 'ModalResult', 0)
  103.   GuiSetProp('dlgExtract.edLimit', 'Focused', True)
  104.   return
  105. endif
  106. b1 = GuiGetProp('dlgExtract.cbEncoding', 'ItemIndex')
  107. if (b1 == -1)
  108.   = cancel closing
  109.   GuiSetProp('dlgExtract', 'ModalResult', 0)
  110.   GuiSetProp('dlgExtract.cbEncoding', 'Focused', True)
  111.   return
  112. endif
  113.  
  114. == get values
  115. charstouse = t5
  116. charstostart = t1
  117. minlen = dword(t2)
  118. limit = dword(t3)
  119. alphasort = GuiGetProp('dlgExtract.cbAlphaSort', 'Checked')
  120.  
  121. if (not GuiGetProp('dlgExtract.cbCurPos', 'Checked'))
  122.   startpos = 0
  123. endif
  124.  
  125. ifgoto b1 0, ccg0, 1, ccg1, 2, ccg2, 3, ccg3, 4, ccg4, 5, ccg5, 6, ccg6, 7, ccg7,8, ccg8
  126. goto ccbset
  127. @@ccg0:charset=TEXTCONVERT_ANSI:goto ccgset
  128. @@ccg1:charset=TEXTCONVERT_DOS8:goto ccgset
  129. @@ccg2:charset=TEXTCONVERT_ASCII7:goto ccgset
  130. @@ccg3:charset=TEXTCONVERT_MAC:goto ccgset
  131. @@ccg4:charset=TEXTCONVERT_EBCDIC:goto ccgset
  132. @@ccg5:charset=TEXTCONVERT_UNICODE:goto ccgset
  133. @@ccg6:charset=TEXTCONVERT_UNICODEBE:goto ccgset
  134. @@ccg7:charset=TEXTCONVERT_CUSTOM:goto ccgset
  135. @@ccg8:charset=(TEXTCONVERT_CUSTOM-1)
  136. @@ccgset
  137.  
  138. == store values
  139. regwrite myregkey, "charset", charset
  140. regwrite myregkey, "minlen", minlen
  141. regwrite myregkey, "limit", limit
  142. regwrite myregkey, "charstouse", charstouse
  143. regwrite myregkey, "charstostart", charstostart
  144. regwrite myregkey, "alphasort", alphasort
  145.  
  146. return
  147.  
  148. @@checkchars
  149. var test text res text
  150. pop test
  151. test = textupper(test)
  152. res = ''
  153. var i dword
  154. i = 1
  155. while (i < textlen(test))
  156.   if (textcopy(test,i,1) != '?')
  157.     inc i,1
  158.   else
  159.     res = textcopy(test,i,3)
  160.     inc i,3
  161.     ifgoto res, "?HT", cc1, "?QM", cc1, "?VT", cc1, "?FF", cc1, "?LF", cc1, "?CR", cc1, "?SP", cc1
  162.     if (textcopy(res,1,2) != '?X')
  163.       return res
  164.     endif
  165.     res = res+textcopy(test,i,3)
  166.     if (not ishex(textcopy(res, 3,4)))
  167.       return res
  168.     endif
  169.     inc i,3 
  170. @@cc1:
  171.     res=''
  172.   endif 
  173. endwhile
  174. return res
  175.  
  176.  
  177. @@showcharsinfo:= show accepted characters info
  178. msgbox __INFOAC__, MB_ICONINFORMATION, __INFOACT__
  179. return:= could also be the END command as the script cannot be terminated in a event handler!
  180.  
  181. = read options from registry
  182. @@readoptions
  183. IF (not REGREAD(myregkey, "charset", @charset))
  184.   charset = (TEXTCONVERT_CUSTOM-1) := if set to (TEXTCONVERT_CUSTOM-1), use charset of the open file
  185. ENDIF
  186. IF (not REGREAD(myregkey, "minlen", @minlen))
  187.   minlen = 4 := at least four characters to form a string
  188. ENDIF
  189. IF (not REGREAD(myregkey, "limit", @limit))
  190.   limit = 100 := max 100 strings per page
  191. ENDIF
  192. IF (not REGREAD(myregkey, "charstouse", @charstouse))
  193.   charstouse = "?HT?LF?VT?FF?CR?SP!"+'"'+"#$%&'()*+,-./0123456789:;<=>?QM@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_abcdefghijklmnopqrstuvwxyz{|}~Çó"
  194. ENDIF
  195. IF (not REGREAD(myregkey, "charstostart", @charstostart))
  196.   charstostart = "_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
  197. ENDIF
  198. IF (not REGREAD(myregkey, "alphasort", @alphasort))
  199.   alphasort = 0
  200. ENDIF
  201. return
  202.  
  203. @@do_from:= called from html
  204. call readoptions
  205. var t text
  206. pop t:= name of the parameter
  207. pop t:= value of the parameter
  208. startpos = dword(t)
  209.  
  210. @@doextract
  211.  
  212. = call the plugin (located in the tiny hexer root directory)
  213. !Cmd.ToolsStructureViewer, 1
  214. !PLUGIN ENVPARSE('%apppath%\extractstrings.ths'), "::current", charset, minlen, charstouse, limit, startpos, charstostart, alphasort
  215. return
  216.  
  217.  
  218.  
  219.